package com.wwu.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wwu.common.web.ResultObj;
import com.wwu.common.web.ResultPage;
import com.wwu.system.entity.SysQuartz;
import com.wwu.system.vo.QueryVO;

import java.util.List;

/**
 * 定时任务服务接口类
 * @author 一蓑烟雨
 * @date 2023/8/13 17:49
 */
public interface ISysQuartzService extends IService<SysQuartz> {

    /**
     * 分页查询定时任务
     * @param pageNum  页码
     * @param pageSize  每页数量
     * @param sysQuartz 定时任务实体
     * @param queryVO   前端查询条件封装实体类
     * @return com.wwu.common.web.ResultPage<com.wwu.system.entity.SysQuartz>
     * @author 一蓑烟雨
     * @date 2023/8/13 17:54
     */
    ResultPage<SysQuartz> getQuartzListPage(Integer pageNum, Integer pageSize, SysQuartz sysQuartz, QueryVO queryVO);

    /**
     * 根据任务名获取定时任务
     * @param quartzName   任务名
     * @return com.wwu.system.entity.SysQuartz
     * @author 一蓑烟雨
     * @date 2023/8/13 18:00
     */
    SysQuartz getQuartzByName(String quartzName);


    /**
     * 根据任务执行类获取定时任务
     * @param quartzClass   任务执行类
     * @return com.wwu.system.entity.SysQuartz
     * @author 一蓑烟雨
     * @date 2023/8/13 18:00
     */
    SysQuartz getQuartzByClass(String quartzClass);

    /**
     * 添加定时任务
     * @param sysQuartz 定时任务实体
     * @author 一蓑烟雨
     * @date 2023/8/13 18:01
     */
    void saveQuartz(SysQuartz sysQuartz);

    /**
     * 更新定时任务
     * @param sysQuartz 定时任务实体
     * @return com.wwu.common.web.ResultObj
     * @author 一蓑烟雨
     * @date 2023/8/13 18:01
     */
    ResultObj updateQuartz(SysQuartz sysQuartz);

    /**
     * 更新定时任务启停状态
     * @param quartzId 任务id
     * @param quartzStatus 任务启动状态
     * @author 一蓑烟雨
     * @date 2023/8/13 18:02
     */
    void updateQuartzStatus(String quartzId, Integer quartzStatus);

    /**
     * 更新定时任务最近一次执行状态
     * @param quartzId 任务id
     * @param quartzExecStatus 任务执行状态
     * @author 一蓑烟雨
     * @date 2023/8/13 18:02
     */
    void updateQuartzExecStatus(String quartzId, Integer quartzExecStatus);

    /**
     * 删除定时任务
     * @param quartzIds 任务id集合
     * @author 一蓑烟雨
     * @date 2023/8/13 18:03
     */
    void deleteQuartz(List<String> quartzIds);

    /**
     * 删除任务调度
     * @param sysQuartz   定时任务实体类
     * @return com.wwu.common.web.ResultObj
     * @author 一蓑烟雨
     * @date 2023/8/16 12:01
     */
    ResultObj deleteQuartzScheduler(SysQuartz sysQuartz);

    /**
     * 添加任务调度
     * @param sysQuartz   定时任务实体类
     * @return com.wwu.common.web.ResultObj
     * @author 一蓑烟雨
     * @date 2023/8/16 12:01
     */
    ResultObj addQuartzScheduler(SysQuartz sysQuartz);

    /**
     * 停止任务调度
     * @param sysQuartz   定时任务实体类
     * @return com.wwu.common.web.ResultObj
     * @author 一蓑烟雨
     * @date 2023/8/16 14:56
     */
    ResultObj stopQuartzScheduler(SysQuartz sysQuartz);
}
